/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.agi.myhome;

import br.com.agi.myhome.dominio.Estoque;
import br.com.agi.myhome.dominio.Produto;
import br.com.agi.myhome.servicos.CadastradorEstoque;
import br.com.agi.myhome.servicos.CadastradorProduto;
import br.com.agi.myhome.servicos.RegistroDuplicadoException;
import br.com.agi.myhome.util.BeanUtil;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.EJB;
import javax.enterprise.context.Conversation;
import javax.enterprise.context.ConversationScoped;
import javax.inject.Inject;
import javax.inject.Named;

/**
 *
 * @author Renato
 */
@Named
@ConversationScoped
public class CadastroProduto implements Serializable{

    private static final String cadastro_produto ="cadastro_produto";
    
    private List<ProdutoAction> produtos;
    
    @EJB
    private CadastradorProduto cadastrador;
    
    @EJB 
    private CadastradorEstoque cadastradorEstoque;
    
    private Produto produto;
    
   @Inject
   private BeanUtil beanUtil;
    
    @Inject
    private ControladorProduto controladorProduto;

    @Inject
    private ComprarProduto comprarProduto;
    
    @Inject
    private FormularioEstoque formularioEstoque;
    
    @Inject
    private Conversation conversation; 
    
    public CadastroProduto() {
        this.produto = new Produto();
    }

    public Produto getProduto() {
        return produto;
    }

    public void setProduto(Produto produto) {
        this.produto = produto;
    }

    public void cadastrar() {        
        try{            
            cadastrador.cadastrar(produto);  
            beanUtil.registrarSucesso(cadastro_produto);     
            this.apresentarListagem();
        }catch(RegistroDuplicadoException e){
            beanUtil.registrarDuplicado();
        }        
        produto=new Produto();
    }
    
    public void salvar(){        
        cadastrador.salvar(produto);
        produto=new Produto();
        this.apresentarListagem();
        beanUtil.registrarSucesso(cadastro_produto);
    }
       
    
    public void listar(){
        this.iniciarConversacao();       
        List<Produto> listaProdutos;
        List<ProdutoAction> produtosAction;
        produtosAction=new ArrayList<ProdutoAction>();
        listaProdutos=cadastrador.getListaEntidade();
        for(Produto item : listaProdutos){
            ProdutoAction produtoAction;
            produtoAction=new ProdutoAction();
            produtoAction.setProduto(item);           
            produtoAction.setCadastroProduto(this);
            produtosAction.add(produtoAction);
        }
        this.produtos=produtosAction;        
    }
   
    public List<ProdutoAction>getProdutos(){
        return produtos;        
    }
    
    
    private void iniciarConversacao(){
        if(!conversation.isTransient()){
            conversation.end();
        }
        this.conversation.begin();
    }
    
    public void montarListaSelecaoEstoque(){
        this.selecaoEstoque=cadastradorEstoque.getListaEntidade();   
    }
    public String apresentarEdicao(){
        String retorno;
        retorno="";
        this.montarListaSelecaoEstoque();
        this.controladorProduto.apresentarEdicao();
        return retorno;
        
    }
     public String apresentarCadastro(){
         this.produto=new Produto();
         this.montarListaSelecaoEstoque();
         this.controladorProduto.apresentarCadastro();
         return "";
     } 
     
     
     public String apresentarListagem(){
         this.listar();         
         this.controladorProduto.apresentarListagem();
         return "";
     }
     
     
     private Estoque estoque;

    public Estoque getEstoque() {
        return estoque;
    }

    public void setEstoque(Estoque estoque) {
        this.estoque = estoque;
    }
     
     
     public String apresentarCompra(){
         this.controladorProduto.aprentarCompra();
         this.comprarProduto.iniciarPagina();
         return "";
     }
     
     private List<Estoque> selecaoEstoque;
     public List<Estoque> getSelecaoEstoque(){
         return selecaoEstoque;
     }
     
     public String apresentarQuantidade(){
         this.controladorProduto.apresentarQuantidade();
         
         
         
         return "";
     }
    
     public String apresentarConsumo(){
         this.formularioEstoque.iniciarConversacao();
         this.controladorProduto.apresentarConsumo();
         return "";
     }
}
